package com.lt.lumentracks.service;


import com.lt.lumentracks.entity.dto.post.PostAddDTO;
import com.lt.lumentracks.entity.dto.post.PostDTO;
import com.lt.lumentracks.entity.dto.post.PostReadDTO;
import com.lt.lumentracks.entity.dto.post.PostUpdateDTO;
import com.lt.lumentracks.entity.po.Post;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lt.lumentracks.entity.vo.common.PageVO;
import com.lt.lumentracks.entity.vo.common.Result;
import com.lt.lumentracks.entity.vo.post.PostVO_list;
import com.lt.lumentracks.entity.vo.post.PostVO_show;

import java.util.List;

/**
 * <p>
 * 帖子主表 服务类
 * </p>
 *
 * @author swl
 * @since 2025-07-11
 */
public interface IPostService extends IService<Post> {

    // 添加帖子
    Result<Integer> addPost(PostAddDTO addDTO);


    // 批量保存,用于ES同步mysql数据库
    void BulkDoc_save();


    // 删除帖子
    Result<String> delPostById(Integer id);


    // 修改帖子
    Result<String> updatePostById(PostUpdateDTO updateDTO);

    // 修改帖子的可见性
    Result<String> updatePostVisible(Integer id, Integer privacy);


    // 查询所有帖子
    Result<List<Post>> getAllPost();

    // 分页查全部（返回数据库中的Post表对应的实体类）
    PageVO<Post> getRawPostsByPage(long current, long size);

    // 分页查全部（返回[帖子列表]展示所需的所有属性）
    PageVO<PostVO_list> getDisplayPostsListByPage(long current, long size);

    // 获取热门帖子
    List<Post> getHotPosts(int i);

    // 分页查，首页推送
    List<PostVO_list> feedForHomePage(Integer userId, int current, int size);

    // 分页查，查询我关注的用户发的帖子
    PageVO<PostVO_list> getDisplayPostsListByMyFollowing(Integer userId, long current, long size);

    // 条件查询,根据标签查找帖子（返回集合列表）
    PageVO<PostVO_list> getPostsListByTagIds_exact(List<Integer> tagIdList, long current, long size);

    // 条件查询
    PageVO<Post> getInCondition(PostDTO postDTO);

    // 根据id查询帖子（返回一个帖子展示所需所有属性）
    PostVO_show getPostInfoById(Integer id, Integer userId);

    // 根据标题查询帖子，从es中查询
    PageVO<PostVO_list> getByTitle(String title, long current, long size);

    // 根据用户id，返回用户创作的帖子信息
    PageVO<PostVO_list> getByUserId(Integer userId, long current, long size);

    // 根据用户id，返回用户点赞的帖子信息
    PageVO<PostVO_list> getByUserLike(Integer userId, long current, long size);

    // 根据用户id，返回用户收藏的帖子信息
    PageVO<PostVO_list> getByUserCollect(Integer userId, long current, long size);

    // 阅读帖子
    void read(PostReadDTO prDTO);

    // 点赞帖子
    void like(Integer postId);

    // 收藏帖子
    void collect(Integer postId);

    // 刷新指定日期的热门帖子
    void refreshDailyHotPosts(String date);
}
